package com.pic4493.entities;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;

import org.json.JSONObject;

import com.pic4493.comm.Session;
import com.pic4493.utils.UtiMD5;

@SuppressLint("SimpleDateFormat")
public class DHead
{
   public static final int DEFAULT_PAGE_SIZE = 10;
   public static final int MAX_RECORD_COUNT = 50;
   private final String SUCCESS_CODE = "000000";

   private LinkedHashMap<String, String> _dict;

   public DHead()
   {

	  try
	  {
//		 Date date = new Date(System.currentTimeMillis());
//		 String d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
		 
		 _dict = new LinkedHashMap<String, String>();
		 _dict.put("version", Session.getInstance().getVersion());	 
		 _dict.put("channel", Session.getInstance().getChannel());		
		 _dict.put("imei", Session.getInstance().getImei());
	     _dict.put("verify", UtiMD5.crypt((Session.getInstance().getVerify()+Session.getInstance().getUserId()))); 
//		 _dict.put("posttime", d);
		 _dict.put("uid", Session.getInstance().getUserId());
		 
		 _dict.put("apicode", "");
		 
		 _dict.put("pagesize", String.valueOf(DEFAULT_PAGE_SIZE));
		 _dict.put("page", "1");
		 _dict.put("pagecount", "1");

		 _dict.put("rspcode", "");
		 _dict.put("rspmsg", "");

	  }
	  catch (Exception e)
	  {
		 Log.d("ERROR", "DHead_DHead(context) " + e);
	  }

   }

   private LinkedHashMap<String, String> getFields()
   {
	  return _dict;
   }

   public String getVersion()
   {
	  return _dict.get("version");
   }

//   public String getPostTime()
//   {
//	  return _dict.get("posttime");
//   }

   public String getApiCode()
   {
	  return _dict.get("apicode");
   }

   public String getChannel()
   {
	  return _dict.get("channel");
   }

   public String getRspCode()
   {
	  return _dict.get("rspcode");
   }

   public String getRspMsg()
   {
	  return _dict.get("rspmsg");
   }

   public String getImei()
   {
	  return _dict.get("imei");
   }

   public String getUserId()
   {
	  return _dict.get("uid");
   }

   public int getPage()
   {
	  String page = _dict.get("page");
	  if (page == null || page.equals(""))
	  {
		 return 0;
	  }
	  else
	  {
		 return Integer.parseInt(page);
	  }
   }

   public int getPageSize()
   {
	  String size = _dict.get("pagesize");
	  if (size == null || size.equals(""))
	  {
		 return 0;
	  }
	  else
	  {
		 return Integer.parseInt(size);
	  }
   }

   public int getPageCount()
   {
	  String size = _dict.get("pagecount");
	  if (size == null || size.equals(""))
	  {
		 return 0;
	  }
	  else
	  {
		 return Integer.parseInt(size);
	  }
   }

   public String getVerify()
   {
	  return _dict.get("verify");
   }

   public void setVersion(String version)
   {
	  _dict.put("version", version);
   }
   
   public void setApiCode(String code)
   {
	  _dict.put("apicode", code);
   }

   public void setRspCode(String code)
   {
	  _dict.put("rspcode", code);
   }

   public void setRspMsg(String msg)
   {
	  _dict.put("rspmsg", msg);
   }

   public void setChannel(String channel)
   {
	  _dict.put("channel", channel);
   }

   public void setPage(int pageIndex)
   {
	  _dict.put("page", String.valueOf(pageIndex));
   }

   public void setPageSize(int pageSize)
   {
	  _dict.put("pagesize", String.valueOf(pageSize));
   }

   public void setImei(String imei)
   {
	  _dict.put("imei", imei);
   }

   public void setPageCount(int pageCount)
   {
	  _dict.put("pagecount", String.valueOf(pageCount));
   }

   public void setUserId(String userId)
   {
	  _dict.put("uid", userId);
   }

   public boolean hasError()
   {
	  if (getRspCode() == null)
	  {
		 return false;
	  }
	  else
	  {
		 return !SUCCESS_CODE.equals(getRspCode());
	  }
   }
   
   public void reset(DHead head)
   {
	  LinkedHashMap<String, String> map = head.getFields();
	  if (map != null && map.size() > 0)
	  {
		 clear();
		 for (String key : map.keySet())
		 {
			_dict.put(key, map.get(key));
		 }
	  }
   }

   public void clear()
   {
	  _dict.clear();
   }

   public void fromJson(JSONObject jo)
   {
	  clear();
	  Iterator<?> iter = jo.keys();
	  while (iter.hasNext())
	  {
		 String name = (String) iter.next();
		 String value = jo.optString(name);
		 _dict.put(name, value == null ? "" : value);
	  }
   }

   public JSONObject toJson() throws Exception
   {
	  JSONObject jo = new JSONObject();
	  for (String key : _dict.keySet())
	  {
		 jo.put(key, _dict.get(key));
	  }
	  return jo;
   }
   // private String Version;
   // private String PostTime;
   // private String APICode;
   // private int PageNo;
   // private int PageSize;
   // private int PageCount;
   // private boolean UseGZip;
   // private String RspCode;
   // private String RspMsg;
   // private String UserName;
   // private String UserId;
   //
   // public String getUserName()
   // {
   // return UserName;
   // }
   //
   // public void setUserName(String userName)
   // {
   // UserName = userName;
   // }
   //
   // public String getUserId()
   // {
   // return UserId;
   // }
   //
   // public void setUserId(String userId)
   // {
   // UserId = userId;
   // }
   //
   // public String getVersion()
   // {
   // return Version;
   // }
   //
   // public void setVersion(String version)
   // {
   // Version = version;
   // }
   //
   // public String getPostTime()
   // {
   // return PostTime;
   // }
   //
   // public void setPostTime(String postTime)
   // {
   // PostTime = postTime;
   // }
   //
   // public String getAPICode()
   // {
   // return APICode;
   // }
   //
   // public void setAPICode(String aPICode)
   // {
   // APICode = aPICode;
   // }
   //
   // public int getPageNo()
   // {
   // return PageNo;
   // }
   //
   // public void setPageNo(int pageNo)
   // {
   // PageNo = pageNo;
   // }
   //
   // public int getPageSize()
   // {
   // return PageSize;
   // }
   //
   // public void setPageSize(int pageSize)
   // {
   // PageSize = pageSize;
   // }
   //
   // public int getPageCount()
   // {
   // return PageCount;
   // }
   //
   // public void setPageCount(int pageCount)
   // {
   // PageCount = pageCount;
   // }
   //
   // public boolean getUseGZip()
   // {
   // return UseGZip;
   // }
   //
   // public void setUseGZip(boolean useGZip)
   // {
   // UseGZip = useGZip;
   // }
   //
   // public String getRspCode()
   // {
   // return RspCode;
   // }
   //
   // public void setRspCode(String rspCode)
   // {
   // RspCode = rspCode;
   // }
   //
   // public String getRspMsg()
   // {
   // return RspMsg;
   // }
   //
   // public void setRspMsg(String rspMsg)
   // {
   // RspMsg = rspMsg;
   // }

   // public DHead()
   // {
   //
   // }
   //
   //
   // public DHead(String _APICode)
   // {
   // Version = ver;
   // Date date = new Date(System.currentTimeMillis());
   // PostTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
   // APICode = _APICode;
   // PageNo = 1;
   // PageSize = DEFAULT_PAGE_SIZE;
   // PageCount = 0;
   // UseGZip = false;
   // RspCode = SUCCESS_CODE;
   // RspMsg = "";
   // }
   //
   // public DHead(String _APICode,boolean _UseGZip)
   // {
   // Version = ver;
   // Date date = new Date(System.currentTimeMillis());
   // PostTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
   // APICode = _APICode;
   // PageNo = 1;
   // PageSize = DEFAULT_PAGE_SIZE;
   // PageCount = 0;
   // UseGZip = _UseGZip;
   // RspCode = SUCCESS_CODE;
   // RspMsg = "";
   // }
   // public DHead(String _APICode,int _PageNo)
   // {
   // Version = ver;
   // Date date = new Date(System.currentTimeMillis());
   // PostTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
   // APICode = _APICode;
   // PageNo = _PageNo;
   // PageSize = DEFAULT_PAGE_SIZE;
   // PageCount = 0;
   // UseGZip = false;
   // RspCode = SUCCESS_CODE;
   // RspMsg = "";
   // }
   // public DHead(String _APICode,int _PageNo,int _PageSize)
   // {
   // Version = ver;
   // Date date = new Date(System.currentTimeMillis());
   // PostTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
   // APICode = _APICode;
   // PageNo = _PageNo;
   // PageSize = _PageSize;
   // PageCount = 0;
   // UseGZip = false;
   // RspCode = SUCCESS_CODE;
   // RspMsg = "";
   // }
   //
   // public DHead(DXml.HeadField head)
   // {
   // Version = head.GetFieldValue("Version");
   // PostTime = head.GetFieldValue("PostTime");
   // APICode = head.GetFieldValue("APICode");
   // PageNo = head.GetFieldInt32("PageNo");
   // PageSize = head.GetFieldInt32("PageSize");
   // PageCount = head.GetFieldInt32("PageCount");
   // UseGZip = head.GetFieldValue("UserGZip").equals("1") ? true : false;
   // RspCode = head.GetFieldValue("RepCode");
   // RspMsg = head.GetFieldValue("RspMsg");
   // }

   // public void FromXML(DXml.HeadField head)
   // {
   // Version = head.GetFieldValue("Version");
   // PostTime = head.GetFieldValue("PostTime");
   // APICode = head.GetFieldValue("APICode");
   // PageNo = head.GetFieldInt32("PageNo");
   // PageSize = head.GetFieldInt32("PageSize");
   // PageCount = head.GetFieldInt32("PageCount");
   // UseGZip = head.GetFieldValue("UserGZip").equals("1") ? true : false;
   // RspCode = head.GetFieldValue("RepCode");
   // RspMsg = head.GetFieldValue("RspMsg");
   // }
   //
   // public void ToXML(DXml.HeadField head)
   // {
   // head.Clear();
   // head.AddField("Version", Version);
   //
   // Date date = new Date(System.currentTimeMillis());
   // String t = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
   // head.AddField("PostTime", t);
   //
   // head.AddField("APICode", APICode);
   // head.AddField("PageNo", String.valueOf(PageNo));
   // head.AddField("PageSize", String.valueOf(PageSize));
   // head.AddField("PageCount", String.valueOf(PageCount));
   // head.AddField("UseGZip", UseGZip ? "1" : "0");
   // head.AddField("RspCode", RspCode);
   // head.AddField("RspMsg", RspMsg);
   // }

}
